//
//  Person.m
//  DEMO5
//
//  Created by J on 16/5/12.
//  Copyright © 2016年 J. All rights reserved.
//   自定义对象要实现copy功能呢个 遵守NSCopying协议  实现 - (id)copyWithZone:(NSZone *)zone{
//   遵守协议:本质上是方便程序员编写代码时候有提示  不遵守运行的时候动态通过selector查找

#import "Person.h"
@interface Person()<NSCopying,NSMutableCopying>

@end
@implementation Person
- (instancetype)initWithDictionary:(NSDictionary*)dic;{
    if (self = [super init]){
        [self setValuesForKeysWithDictionary:dic];
    }
    return self;
}
+ (instancetype)personWithDic:(NSDictionary*)dic{
    
    return  [[self alloc] init];//self 当前类 + 方法
    
}

- (NSString *)description{
    return [NSString stringWithFormat:@"<%@ %p> {name:%@, age:%@}",self.class,self,self.name,self.age];
}
//zone 区域  指定在内存在区域内分配 如果分配内存就在这个区域内分配 减少内存碎片
//copy操作将一个对象复制给新的对象
- (id)copyWithZone:(NSZone *)zone{//copying 最终 都会调用这个方法
    //1.初始化对象  -方法 self.class 获取当前类 如果是 + 方法 self代表当前类
    Person* p = [self.class new];//    Person* p = [Person new];  self.class保证子类调用copy返回的是子类而不是父类
    
    //2.属性赋值
    p.name = self.name;
    p.age  = self.age;
    NSLog(@"%s",__func__);
    //返回新对象
    return  p;//如果返回self等于没有copy
}
- (id)mutableCopyWithZone:(NSZone *)zone{//mutableCopying最终 都会调用这个方法
    NSLog(@"%s",__func__);
    return self;
}



@end
